/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package servlets;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import utils.CargarConfiguraciones;
import utils.respuestaServlet;

/**
 *
 * @author Eduardo Cerritos
 */
public class mensajeAlumnos extends HttpServlet {
   
    private Connection conexion;
    private Statement instruccion;

    //Establecer la conexion con la base de datos
    @Override
    public void init (ServletConfig config) throws ServletException{

    //Intentar la conexion y crear instrucciones
        try{
        CargarConfiguraciones cc = new CargarConfiguraciones();
        Class.forName(cc.getValor("driver"));
        conexion =  DriverManager.getConnection(cc.getValor("urlbase"),
                    cc.getValor("usuario"),
                    cc.getValor("clave"));
        //Crear la instruccion
        instruccion = conexion.createStatement();
        }catch(Exception e){
            e.printStackTrace();
        }//end catch
    }

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            int opcion  = Integer.parseInt(request.getParameter("opcion"));
            String sql;
            String materia = request.getParameter("materia");
            String asunto = request.getParameter("asunto");
            String mensaje = request.getParameter("mensaje");
            
            if(!materia.equalsIgnoreCase("todos")){
                 sql = "SELECT a.email, a.telefono, a.carnet FROM alumno a JOIN alumno_materia m USING (carnet) WHERE m.codmateria = '" + materia + "'";
            }
            else{
                sql = "SELECT a.email, a.telefono, a.carnet FROM alumno a";
            }
            System.out.println(sql);
            ResultSet alumnoRS = instruccion.executeQuery(sql);
            respuestaServlet.imprimirEncabezado(out, "Mensaje a Alumnos");
            while(alumnoRS.next())//si encontro al alumno mover a ese registro
            {
                if(opcion == 1 || opcion == 3) // si desea enviar un emai
                {
                    String email = alumnoRS.getString(1);
                    if(email != null)
                        EnviarNotas.enviarMensaje(asunto, mensaje, email);
                    else
                        out.println("El alumno: " + alumnoRS.getString(3) + " no ha ingresado su email al sistema<br />");
                }
                if(opcion == 2 || opcion == 3) // si desea enviar un sms
                {
                    String telefono = alumnoRS.getString(2);
                    if(telefono != null)
                        EnviarNotas.enviarTxt(asunto, mensaje, new String(Base64.decode(telefono)));
                    else
                        out.println("El alumno: " + alumnoRS.getString(3) + " no ha ingresado su telefono celular al sistema<br />");
                }
            }
            
            out.println("<br />Se ha enviado el siguiente mensaje:<br />");
            out.println("(" + asunto + ") " + mensaje );
            respuestaServlet.imprimirPie(out);
            
        } catch (SQLException ex) {
            Logger.getLogger(mensajeAlumnos.class.getName()).log(Level.SEVERE, null, ex);
            respuestaServlet.imprimirEncabezado(out, "Mensaje a Alumnos");
            out.println("No se ha podido enviar el mensaje");
            respuestaServlet.imprimirPie(out);
        } finally { 
            out.close();
        }
    }

     @Override
    public void destroy()
    {

        try{
            instruccion.close();
            conexion.close();

        }
        catch(SQLException exc)
        {
            exc.printStackTrace();
        }

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
